using Godot;
using System;

// [GlobalClass] 使得你可以在编辑器中右键创建这个资源，并在Inspector中作为类型筛选
[GlobalClass]
public partial class PlayerStats : Resource
{
    // ==========================================
    // 配置区域 (设计调整这些数值)
    // ==========================================
    [ExportGroup("Movement Settings")]
    [Export] public float MoveSpeed { get; set; } = 300.0f;
    [Export] public float JumpForce { get; set; } = 600.0f;


    [ExportGroup("Survival")]
    [Export] public int MaxHealth { get; set; } = 100;

    // ==========================================
    // 运行时区域 (游戏逻辑修改这些数值)
    // ==========================================

    // 使用 C# 属性和事件来驱动 UI 更新
    private int _currentHealth;
    public int CurrentHealth
    {
        get => _currentHealth;
        set
        {
            _currentHealth = Mathf.Clamp(value, 0, MaxHealth);
            // 触发事件通知 UI 或 动画
            EmitSignal(SignalName.HealthChanged, _currentHealth, MaxHealth);

            if (_currentHealth <= 0)
                EmitSignal(SignalName.PlayerDied);
        }
    }


    // ==========================================
    // 信号定义 (Godot 风格)
    // ==========================================
    [Signal] public delegate void HealthChangedEventHandler(int current, int max);
    // [Signal] public delegate void MaterialsChangedEventHandler(int current);
    [Signal] public delegate void PlayerDiedEventHandler();

    // ==========================================
    // 初始化方法
    // ==========================================
    public void Initialize()
    {
        _currentHealth = MaxHealth;
        // _currentMaterials = MaxBridgeMaterials; // 或者 0，看设计
    }
}